home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / shells / scsh-0.4 / scsh-0 / scsh-0.4.2 / scsh / dbm1.c < prev    next >
C/C++ Source or Header  |  1995-10-13  |  2KB  |  96 lines

  1. /* Scheme48/scsh Unix system interface.
  2. ** Routines that require custom C support.
  3. ** Copyright (c) 1995 by David Albertz.
  4. */
  5.  
  6. /*  Common dbm access routines */
  7.  
  8. #include <stdio.h>
  9. #include <errno.h>
  10. #include <ndbm.h>
  11.  
  12. #include "cstuff.h"
  13.  
  14. extern int errno;
  15.  
  16. int database_delete(DBM *db, scheme_value key)
  17. {
  18.     datum work_key;
  19.     work_key.dptr = ADDRESS_AFTER_HEADER(key, char);
  20.     work_key.dsize = STRING_LENGTH(key);
  21.     return(dbm_delete(db, work_key));
  22.     }
  23.  
  24. char *database_fetch(DBM *db, scheme_value key)
  25. {
  26.     datum work_key, work_data;
  27.     char *work_string;
  28.     work_key.dptr = ADDRESS_AFTER_HEADER(key, char);
  29.     work_key.dsize = STRING_LENGTH(key);
  30.     work_data = dbm_fetch(db, work_key);
  31.     if (work_data.dptr == NULL)
  32.     {
  33.     work_string = Malloc(char, 1);
  34.     work_string[0] = '\0';
  35.     }
  36.     else
  37.     {
  38.     work_string = Malloc(char, work_data.dsize+1);
  39.     memcpy(work_string,work_data.dptr,work_data.dsize);
  40.     work_string[work_data.dsize] = '\0';
  41.     }
  42.     return(work_string);
  43.     }
  44.  
  45. int database_store(DBM *db, scheme_value key, scheme_value data, int flags)
  46. {
  47.     datum work_key, work_data;
  48.     work_key.dptr = ADDRESS_AFTER_HEADER(key, char);
  49.     work_key.dsize = STRING_LENGTH(key);
  50.     work_data.dptr = ADDRESS_AFTER_HEADER(data, char);
  51.     work_data.dsize = STRING_LENGTH(data);
  52.     return(dbm_store(db, work_key, work_data, flags));
  53.     }
  54.  
  55. char *database_first(DBM *db)
  56. {
  57.     datum work_key;
  58.     char *work_string;
  59.     work_key = dbm_firstkey(db);
  60.     if (work_key.dptr == NULL)
  61.     {
  62.     work_string = Malloc(char, 1);
  63.     work_string[0] = '\0';
  64.     }
  65.     else
  66.     {
  67.     work_string = Malloc(char, work_key.dsize+1);
  68.     memcpy(work_string,work_key.dptr,work_key.dsize);
  69.     work_string[work_key.dsize] = '\0';
  70.     }
  71.     return(work_string);
  72.     }
  73.  
  74. char *database_next(DBM *db)
  75. {
  76.     datum work_key;
  77.     char *work_string;
  78.     work_key = dbm_nextkey(db);
  79.     if (work_key.dptr == NULL)
  80.     {
  81.     work_string = Malloc(char, 1);
  82.     work_string[0] = '\0';
  83.     }
  84.     else
  85.     {
  86.     work_string = Malloc(char, work_key.dsize+1);
  87.     memcpy(work_string,work_key.dptr,work_key.dsize);
  88.     work_string[work_key.dsize] = '\0';
  89.     }
  90.     return(work_string);
  91.     }
  92.  
  93.  
  94.  
  95.  
  96.